//
//  ClassViewController.h
//  ReviewDemo
//
//  Created by 龙 on 2018/3/17.
//  Copyright © 2018年 long. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface ClassViewController : UIViewController

@end


/*
 https://www.jianshu.com/p/0ba0b2bac78a
 https://www.jianshu.com/p/41735c66dccb
 https://www.jianshu.com/p/a0aaf0ffe6e1
 
 isa 指针
 每一个对象内部都有一个isa指针，这个指针是指向它的真实类型，根据这个指针就能知道将来调用哪个类的方法。
 
 格物致知iOS类与对象

 一、类对象(Class)
 类对象是由程序员定义并在运行时由编译器创建的，它没有自己的实例变量，类的成员变量和实例方法列表是属于实例对象的，但其存储于类对象当中的。
 类和元类是成对出现的，每个类都有自己所属的元类，所以新建一个类需要同时创建类以及它的元类。
 
 总结: 实例对象，类对象以及元类对象之间的isa指向和继承关系的规则为:
 1、 实例对象的isa指向该类，类的isa指向元类(metaClass)
 2、 类的superClass指向其父类，如果该类为根类则值为nil
 3、 元类的isa指向根元类，如果该元类是根元类则指向自身
 4、 元类的superClass指向父元类，若根元类则指向该根类
 
 
 实例变量类型，指向objc_ivar结构体的指针，ivar指针地址是根据class结构体的地址加上基地址偏移字节得到的。
 typedef struct objc_ivar *Ivar;
 
 struct objc_ivar {
 char *ivar_name OBJC2_UNAVAILABLE; // 变量名
 char *ivar_type OBJC2_UNAVAILABLE; // 变量类型
 int ivar_offset OBJC2_UNAVAILABLE; // 基地址偏移字节
 #ifdef __LP64__
 int space OBJC2_UNAVAILABLE;
 #endif
 }
 


 
 */
